package com.yootk.di.service;

import com.yootk.di.config.MessageConfig2;
import com.yootk.di.type.MessageSendStatus;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.util.Iterator;
import java.util.Set;

/**
 * 消息的服务处理
 */
public class MessageService2 implements AutoCloseable {
    private static final Logger LOGGER = LoggerFactory.getLogger(MessageService2.class);

//    private List<MessageConfig2> configs;
    private Set<MessageConfig2> configs;
    private MessageConfig2 currentConfig;   // 当前使用的配置项

    // 定义一个连接方法
    private boolean connect() {
        LOGGER.info("连接服务器：{}:{}", this.currentConfig.getHost(), this.currentConfig.getPort());
        return this.currentConfig.isEnable();   // 通过enable的状态来决定是否连接成功
    }

    // 消息发送
    public MessageSendStatus send(String msg) {
        try {
            Iterator<MessageConfig2> iterable = this.configs.iterator();    // 获取迭代对象
            while (iterable.hasNext()) {
                this.currentConfig = iterable.next();   // 【广播】向所有的通道进行消息发布
                if (this.connect()) {
                    LOGGER.info("【消息发送】{}", msg);
                    this.close();   // 关闭通道
                } else {
                    LOGGER.error("无法创建消息发送通道，消息发送失败。");
                }
            }
        } catch (Exception e) {
            LOGGER.error("消息发送产生异常：{}", e.getMessage());
            return MessageSendStatus.FAILURE;
        }
        return MessageSendStatus.SUCCESS;
    }

    public Set<MessageConfig2> getConfigs() {
        return configs;
    }

    public void setConfigs(Set<MessageConfig2> configs) {
        this.configs = configs;
    }

    @Override
    public void close() throws Exception {
        LOGGER.info("消息发送完毕，断开消息发送通道。");
    }
}
